#ifndef ANIMATION_H_
#define ANIMATION_H_
#include "CFrames.h"
#include <vector>
#include <string>
using namespace std;

class CFrame;
class CAnimation
{
	char* m_szAnimationName;
	char* m_szTrigger;

	
	bool m_bIsPlaying;
	bool m_blooping;

	int m_ncurrentFrame;
	int m_nNumFrames;
	int* m_pAniID;
	int m_nID;

	int m_nxPos;
	int m_nyPos;
	int m_nimageID;

	float m_fFrameDuration;

	RECT m_rframetemp;
	RECT m_rcollisiontemp;
	RECT m_rweapontemp;

	bool flipped;

	vector<CFrames*>  m_vFrames;
public:
	CAnimation(void);
	~CAnimation(void);
	CAnimation(const CAnimation& ani);

	//////////////////////////////////////////////////////////////////////////////////////////////////////
	// Get the current frame you are at
	///////////////////////////////////////////////////////////////////////////////////////////////////////
	CFrames* GetFrame();
	
	//////////////////////////////////////////////////////////////////////////////////////////////////////
	// Get what rect you wants
	///////////////////////////////////////////////////////////////////////////////////////////////////////
	RECT GetFrameRect() { return m_rframetemp; }
	RECT GetCollisionRect() { return m_rcollisiontemp; }
	RECT GetWeaponRect() { return m_rweapontemp; }

	//////////////////////////////////////////////////////////////////////////////////////////////////////
	// animation name stuffffs
	///////////////////////////////////////////////////////////////////////////////////////////////////////
	char* GetAnimationName() { return m_szAnimationName; }
	void SetAnimationName(char* name) { m_szAnimationName = name; }

	//////////////////////////////////////////////////////////////////////////////////////////////////////
	// trigger name stufffffs
	///////////////////////////////////////////////////////////////////////////////////////////////////////
	char* GetTrigger() { return m_szTrigger; }
	void SetTrigger(char* trigger) { m_szTrigger = trigger; } 

	//////////////////////////////////////////////////////////////////////////////////////////////////////
	// add a frame to the frame vector
	///////////////////////////////////////////////////////////////////////////////////////////////////////
	void AddFrame(CFrames* frame);
	
	//////////////////////////////////////////////////////////////////////////////////////////////////////
	// get and set sprite id
	///////////////////////////////////////////////////////////////////////////////////////////////////////
	int GetID() { return m_nimageID; }
	void SetID(int id) { m_nimageID = id; }

	//////////////////////////////////////////////////////////////////////////////////////////////////////
	// get or set weither the animation is playing or not
	///////////////////////////////////////////////////////////////////////////////////////////////////////
	bool GetPlaying() { return m_bIsPlaying; }
	void SetPlaying(bool play) {m_bIsPlaying = play; }

	//////////////////////////////////////////////////////////////////////////////////////////////////////
	// get or set weither the animation is looping or not
	///////////////////////////////////////////////////////////////////////////////////////////////////////
	bool GetLoop() { return m_blooping; }
	void SetLoop(bool loop) { m_blooping = loop; } 

	//////////////////////////////////////////////////////////////////////////////////////////////////////
	// get or set the frame duration
	///////////////////////////////////////////////////////////////////////////////////////////////////////
	float GetDuration() { return m_fFrameDuration; }
	void SetDuration(float dur) { m_fFrameDuration = dur; }

	//////////////////////////////////////////////////////////////////////////////////////////////////////
	// get or set the number of frames
	///////////////////////////////////////////////////////////////////////////////////////////////////////
	int GetNumFrames() { return m_nNumFrames; }
	void SetNumFrames(int frames) { m_nNumFrames = frames; }

	int GetCurrFrame( void ) { return m_ncurrentFrame; }
	//////////////////////////////////////////////////////////////////////////////////////////////////////
	// get or set the x position of the frame
	///////////////////////////////////////////////////////////////////////////////////////////////////////
	int GetPosX() { return m_nxPos; }
	void SetPosX(int pos) { m_nxPos = pos; }

	//////////////////////////////////////////////////////////////////////////////////////////////////////
	// get or set the y position of the frame
	///////////////////////////////////////////////////////////////////////////////////////////////////////
	int GetPosY() { return m_nyPos; }
	void SetPosY(int pos) { m_nyPos = pos; }


	//////////////////////////////////////////////////////////////////////////////////////////////////////
	// get or set the animation id of the frame
	///////////////////////////////////////////////////////////////////////////////////////////////////////
	int* GetAniID() { return m_pAniID; }
	void SetAniID(int* id) { m_pAniID = id; }
	void SetAniID(int id)  { *m_pAniID = id; }

	//////////////////////////////////////////////////////////////////////////////////////////////////////
	// update/render
	///////////////////////////////////////////////////////////////////////////////////////////////////////
	void Update(float dt);
	void Render();

	//////////////////////////////////////////////////////////////////////////////////////////////////////
	// stop and play the animation
	///////////////////////////////////////////////////////////////////////////////////////////////////////
	void Play(){ m_bIsPlaying = true; }
	void Stop(){ m_bIsPlaying = false; }

	int GetIndexID(){return m_nID;}
	void SetIndexID(int ID){m_nID = ID;}

	void SetFlipped(bool flip){flipped = flip;}

};

#endif